关键字POI搜索 Sample详情
最后更新时间:2019年6月17日
POI查询的关键字搜索方式,即根据用户输入的关键字、选择的类型进行模糊查询,搜索满足条件的POI信息点,可以通过标注、绘制或者列表方式展示查询到的兴趣点。
在进行POI查询之前,需准备POI数据,详细步骤参考POI数据组织模块,在此不赘述,接下来讲解具体的关键字搜索的编码实现方法。
1
首先,创建并初始化POI查询对象,设置POI数据。
//创建POI查询对象 PoiSearch poiSearch = new PoiSearch(); //为POI查询对象设置配置好的.db数据,并以此来初始化 poiSearch.initWithDBPath(Environment.getExternalStorageDirectory().getPath()+"/MapGIS Sample/POI/WuHanPOI.db"); //设置查询每页的结果数目 poiSearch.setPageSize(20);
2
进行关键字POI搜索,需要在查询之前设置条件,首先构造查询条件对象PoiSearch.Query,然后利用其接口设置查询的关键字,还可以设置查询的POI类型。代码调用如下所示,在此给定查询关键字为“武汉”,查询类型为TouristAttraction(景点),将查询得到包含关键字为武汉的景点POI点。当然也可查询多种类型。
//构造POI查询条件对象,并设置给查询对象 PoiSearch.Query query = new PoiSearch.Query("武汉", PoiTypeDef.TouristAttraction); poiSearch.setQuery(query);
代码说明:PoiSearch.Query的第一个参数为查询关键字的字符串;第二个参数为POI类型的组合,此为景点类型(TouristAttraction),也可定义组合(如餐馆 + 电影院 + 景点)。
SDK中提供的POI具体分类如下表所示,代码中由com.zondy.mapgis.core.poisearch.PoiTypeDef的字段提供,用户可以根据自己需要选择,在实际项目应用中,可以将这些类型以列表或其他形式展示给终端用户,从而让用户自行选择类型。
POI一级分类 | POI二级分类 | PoiTypeDef字段 |
---|---|---|
所有POI类型 | 类型的全集 | All |
住宿服务 | 宾馆 | Accommodation |
汽车服务 | 加油站 | AutoCarService |
科教文化 | 学校 | Education |
餐饮服务 | 中餐厅 | FoodBeverages |
体育休闲服务 | 娱乐场所,网吧 | InternetBar |
医疗相关服务 | 综合医院 | MedicalService |
公共设施 | 公共厕所 | PublicService |
交通设施服务 | 停车场 | PublicParkingLot |
地铁站 | PublicSubway | |
公交车站 | PublicTransportation | |
购物中心 | 商场 | Shopping |
超市 | SuperMarket | |
风景名胜 | 景点 | TouristAttraction |
3
查询POI,遍历查询结果,并以文本图形、标注形式展示,核心代码如下:
//查询并返回结果 PoiPagedResult searchPoiResult = poiSearch.searchPOI(); //判断是否查询到了结果 if (searchPoiResult != null && searchPoiResult.getTotalPOICount() > 0) { //遍历所有页 for (int i = 1; i <= searchPoiResult.getPageCount(); i++) { List<PoiItem> poiItemList = searchPoiResult.getPage(i); //获取每一页的结果集,从1开始 for (int j = 0; j < poiItemList.size(); j++) {//遍历每一页的结果项 //获取POI项 PoiItem poiItem = poiItemList.get(j); //获取POI点信息:坐标、名称、地址、电话 Dot point = poiItem.getPoint(); String name = poiItem.getName(); String address = poiItem.getAddress(); String phoneNum = poiItem.getTel(); } } mapView.refresh(); //地图刷新 } else { Toast.makeText(this, "查询结果为空", Toast.LENGTH_SHORT).show(); }
查询到POI结果后,可以通过文本图形、地图标注进行展示:
//创建文本图形并绘制 GraphicText pointText = new GraphicText(); pointText.setPoint(point); //坐标点 pointText.setText(name); //文本 pointText.setFontSize(38); //文字大小 pointText.setReferenceInfo(10, 15, 2, new PointF(15, 3)); //锚点 mapView.getGraphicsOverlay().addGraphic(pointText); //根据POI坐标点的名称、地址、坐标以及位图创建标注并绘制 Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.location); Annotation annotationPOI = new Annotation(name, address, point, bmp); mapView.getAnnotationsOverlay().addAnnotation(annotationPOI);
展示效果如下图所示: